//axios的配置
import axios from "axios"

//引入ElementUI中的全局提示方法
import {MessageBox,Message} from "element-ui"

//引入进度条
import NProgress from "nprogress"

//console.log(MessageBox,Message);


//对axios进行一些简单的配置
//axios公共配置
let http = axios.create({
    withCredentials: true,//是否携带凭证
    baseURL: "/api", //基础地址
    timeout: 5000,//超时设置---5s
})
//请求拦截
http.interceptors.request.use(config => {
    NProgress.start(); //进度条出现
    //config 就是请求的对象，里面可以拿到请求的地址 参数等
    
    //获取在localStorage中存储的token
    let token = localStorage.getItem('bb-token')
    config.headers.authorization = token

    //return config 理解为放行
    return config
})

//响应拦截


http.interceptors.response.use(config => {
    NProgress.done();  //进度条消失
    //config 是响应对象，里面可以拿到服务器响应的内容
    //console.log(config)
    let { data: { state, msg , code}  } = config  //嵌套解构语法
    //10022 登入过期
    //1004  token过期
    //10026 没有权限
    let codes =['10022','1004','10026']
    if(codes.includes(code)){
        //清除token
        localStorage.removeItem('bb-token')
        //刷新页面啊
        location.reload()
    }
    //console.log(state,msg);

    // 需要排除不弹窗的接口
    let excludeUrl = ["/order/query_order_status"]
    let isExclude = excludeUrl.includes(config.config.url)
    //拦截器判断后端响应的state
    if(!state && !isExclude){
        MessageBox.alert(msg, '💥错误提示',{
            type:"error"
        })
    }
    

    //return config 理解为放行
    return config
})

export default http